//检查整数及其两倍数是否存在
/*给你一个整数数组 arr，请你检查是否存在两个整数 N 和 M，满足 N 是 M 的两倍（即，N = 2 * M）。
更正式地，检查是否存在两个下标 i 和 j 满足：i != j
0 <= i, j < arr.length
arr[i] == 2 * arr[j]
 2 <= arr.length <= 500
-10^3 <= arr[i] <= 10^3*/
class Solution {
public:
    bool checkIfExist(vector<int>& arr) {
        int hash[2001] = {0};
        for (auto i : arr) {
            hash[i + 1000]++;
        }
        for (auto i : arr) {
            if (i * 2 >= -1000 && i * 2 <= 1000 && hash[(i * 2 + 1000)]) {
                if (i == 0 && hash[i + 1000] >= 2)
                    return true;
                else if (i != 0)
                    return true;
            }
        }
        return false;
    }
};



//使数组中所有元素都等于零
/*给你一个非负整数数组 nums 。在一步操作中，你必须：

选出一个正整数 x ，x 需要小于或等于 nums 中 最小 的 非零 元素。
nums 中的每个正整数都减去 x。
返回使 nums 中所有元素都等于 0 需要的 最少 操作数。
1 <= nums.length <= 100
0 <= nums[i] <= 100
*/
class Solution {
public:
    int minimumOperations(vector<int>& nums) {
        int hash[101] = {0};
        int count = 0;
        for (auto i : nums) {
            hash[i]++;
            if (i != 0 && hash[i] == 1)
                count++;
        }
        return count;
    }
};